#ifndef EPUBDUKPT_EPUB_DUKPT_H
#define EPUBDUKPT_EPUB_DUKPT_H

#if defined(_MSC_VER)
#define API_PUBLIC_20210817 extern "C" __declspec(dllexport)
#elif defined(__GNUC__)
#define API_PUBLIC_20210817 extern "C" __attribute__((visibility("default")))
#endif

API_PUBLIC_20210817 void *EpubDukptContextNew();

API_PUBLIC_20210817 void EpubDukptContextDestroy(void *ctx);

API_PUBLIC_20210817 void EpubDukptComponentA(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 void EpubDukptComponentB(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 void EpubDukptComponentC(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 void EpubDukptBDK(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 bool EpubDukptGetBDK(void *ctx, unsigned char *in);

API_PUBLIC_20210817 void EpubDukptZmkComponentA(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 void EpubDukptZmkComponentB(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 void EpubDukptZmkComponentC(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 void EpubDukptZmk(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 void EpubDukptKSI(void *ctx, unsigned char const *in, int inLen);

API_PUBLIC_20210817 bool EpubDukptBDKKcv(void *ctx, unsigned char *out);

API_PUBLIC_20210817 bool EpubDukptZmkKcv(void *ctx, unsigned char *out);

API_PUBLIC_20210817 void *EpubDukptNew(void *ctx);

API_PUBLIC_20210817 void EpubDukptDestroy(void *ptr);

API_PUBLIC_20210817 bool EpubDukptDisperse(void *ptr, unsigned char const *did, unsigned char *iksn,
  unsigned char *ipek, unsigned char *ikcv);

API_PUBLIC_20210817 int EpubDukptIksnBytes();

API_PUBLIC_20210817 int EpubDukptIpekBytes();

API_PUBLIC_20210817 int EpubDukptIkcvBytes();

#endif//EPUBDUKPT_EPUB_DUKPT_H
